package com.ltx.blog_ltx.until;


import com.ltx.blog_ltx.entity.dto.RemarkDto;

import java.util.ArrayList;
import java.util.List;

public class RemarkDtoTree {

    public List<RemarkDto> RemarkDtoList =new ArrayList<>();

    public RemarkDtoTree(List<RemarkDto> RemarkDtoList){
        this.RemarkDtoList=RemarkDtoList;
    }

    /**
     *  获取一个全部根节点为”0“的集合
     * @return 所有根节点List集合
     */
    public List<RemarkDto> getRootNode(){
        //保存所有的根节点集合
        List<RemarkDto> rootRemarkDtos = new ArrayList<>();
        for (RemarkDto RemarkDto : RemarkDtoList) {
            if(RemarkDto.getParentId()==0){     //如果parentid等于0，则表示为根节点就存入集合中
                rootRemarkDtos.add(RemarkDto);
            }
        }
        return rootRemarkDtos;
    }


    /**
     *  根据每一个顶级节点（根节点）进行构建树形结构
     *  @return  构建整棵树
     */
    public List<RemarkDto> BuildTree(){
        ArrayList<RemarkDto> RemarkDtos = new ArrayList<>();
        for (RemarkDto RemarkDto : getRootNode()) {
            //构建根节点的子树
            RemarkDto rootRemarkDto = BuildChildTree(RemarkDto);
            //把完整的树加入
            RemarkDtos.add(rootRemarkDto);
        }
        return RemarkDtos;
    }


    /**
     *  构造子树
     * @param RemarkDtoNode  //根节点或父节点
     * @return 返回构建好子树的整颗树
     */
    public RemarkDto BuildChildTree(RemarkDto RemarkDtoNode){
        List<RemarkDto> ChildRemarkDto = new ArrayList<>();
        for (RemarkDto RemarkDto : RemarkDtoList) {
            if(RemarkDto.getParentId()==RemarkDtoNode.getRemarkId()){
                //递归调用生成子树，当父节点id和用户id一致是就添加到ChildRemarkDto列表中
                ChildRemarkDto.add(BuildChildTree(RemarkDto));
            }
        }
        //当for循环结束就是构建好整个子树，把子树设置到根节点中
        RemarkDtoNode.setRemarkDtoChild(ChildRemarkDto);
        return RemarkDtoNode;
    }

}
